package com.janko.springbootbase.designmode.multitonPattern;

import java.util.ArrayList;

/**
 * 多例模式。准确说法是：有上限的多例模式
 * 所谓多例(Multiton Pattern)实际上就是单例模式的自然推广，属于对象
 * 创建类型的模式，多例模式其实就是限制了对象的数量，并且有可能对对象进行重复使用
 *
 * 特点：
 * 1：多例可以有多个实例
 * 2:多例类必须能够自我创建并管理自己的实例，并且向外界提供自己的实例
 */
public class Emperor {

    private static final int maxNumberOfEmperor = 2;
    private static ArrayList emperorInfoList = new ArrayList(maxNumberOfEmperor);
    private static ArrayList emperorList = new ArrayList(maxNumberOfEmperor);

    private static int countNumofEmperor = 0;

    /**
     * 懒汉模式
     */
    static{
        for(int i = 0; i < maxNumberOfEmperor ; i++){
            emperorList.add(new Emperor("第"+i+"皇帝"));
        }
    }
    private Emperor(){
    }

    private Emperor(String info){
        emperorInfoList.add(info);
    }

    public static Emperor getInstance(){
        java.util.Random random=new java.util.Random();
        countNumofEmperor=random.nextInt(maxNumberOfEmperor);
        return (Emperor)emperorList.get(countNumofEmperor);
    }

    /**
     * 获取指定的某个实例
     * @param num
     * @return
     */
    public static Emperor getInstance(int num){
        countNumofEmperor = num;
        if (num == 0) {
            return (Emperor) emperorList.get(0);
        }else if(num == 1){
            return (Emperor) emperorList.get(1);
        }else{
            System.out.println("error");
            return null;
        }
    }
}
